<?php

namespace app\admin\controller;


use think\Controller;
use think\Db;
use think\Request;
use think\Session;

class User extends Controller  //控制器
{
    /**用户列表
     * @return \think\response\View
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function index()
    {
        $auth = Session::get('auth');
//        dump($auth['aid']);
        //  查数据库 对应 权限 id   判断该用户有没有
        $rows = Db::field('id')
            ->table('xu_authority')
            ->where('controller', 'user')
            ->where('method', 'index')
            ->find();
//                dump($rows['id']);
//                die;
        if (!in_array($rows['id'], $auth['aid'])) {
            return $this->error('您没有权限访问这里哦!');
        }
//        dump($rows['id']);
//        die;

        //根据遍历出来的 ui 查 该用户对应的角色名
        $rlist = Db::field(['ur.uid', 'r.role', 'u.name'])
            ->table(['xu_role' => 'r', 'xu_user_role' => 'ur', 'xu_user' => 'u'])
            ->where('ur.rid=r.id')
            ->where('u.id=ur.uid')
            ->select();
//        dump($rlist);
//        die;
        $arr = [];
        foreach ($rlist as $k => $v) {
            if (in_array($v['uid'], $v)) {
                $arr[$v['uid']]['id'] = $v['uid'];
                $arr[$v['uid']]['name'] = $v['name'];
                $arr[$v['uid']]['role'][] = $v['role'];

            }
        }
//     dump($arr);
//        die;
        return view('user/tables', [
            'title' => '用户列表',
            'add' => '添加用户',
            'arr' => $arr,

        ]);
    }


    /**添加用户页面
     * @return \think\response\View
     */
    public function add()
    {
         $auth = Session::get('auth');
//        dump($auth['aid']);
        //  查数据库 对应 权限 id   判断该用户有没有
        $rows = Db::field('id')
            ->table('xu_authority')
            ->where('controller', 'user')
            ->where('method', 'add')
            ->find();
//                dump($rows['id']);
//                die;
        if (!in_array($rows['id'], $auth['aid'])) {
            return $this->error('您没有权限访问这里哦!');
        }


        return view('user/add');
    }


    /**执行添加
     * @param Request $request
     */
    public function doadd(Request $request)
    {
        $p = $request->post();

//        dump($p);die;

        //执行添加用户
        $uid = Db::name('xu_user')->insertGetId($p);

//        dump($uid);

        //执行添加该用户 默认的角色   无
        $p2['uid'] = $uid;
        $p2['rid'] = '6';
//        dump($p2);die;

        $rows = Db::name('xu_user_role')
            ->insert($p2);

//        die;

        if ($rows) {
            return $this->success('创建成功', 'admin/user/index');
        } else {
            return $this->error('创建失败');
        }

    }


    /**加载分配角色模板
     * @param $id
     * @return \think\response\View
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function assignRoles($id)
    {
         $auth = Session::get('auth');
//        dump($auth['aid']);
        //  查数据库 对应 权限 id   判断该用户有没有
        $rows = Db::field('id')
            ->table('xu_authority')
            ->where('controller', 'user')
            ->where('method', 'assignRoles')
            ->find();
//                dump($rows['id']);
//                die;
        if (!in_array($rows['id'], $auth['aid'])) {
            return $this->error('您没有权限访问这里哦!');
        }


//        把角色名称遍历到前台
        $role = Db:: name('xu_role')
            ->select();
//    dump($role);
//    die;
//
//        把改用户名 name 放到前台
        $user = Db::field('name')
            ->table('xu_user')
            ->where('id=' . $id)
            ->select();
//        dump($user);

//        查询该用户 已有的角色名称  在前台 打√
        $list = Db::field(['u.name' => 'un', 'u.id' => 'ui', 'r.role' => 'rr'])
            ->table(['xu_user' => 'u', 'xu_role' => 'r', 'xu_user_role' => 'ur'])
            ->where('u.id=ur.uid')
            ->where('ur.rid=r.id')
            ->where('ur.uid=' . $id)
            ->select();
//        dump($list);die;
        if ($list == null) {
            return view('user/assignRoles2', [
                'id' => $id,
                'name' => $user[0]['name'],
                'role' => $role,

            ]);
        }


        $n = '';
        foreach ($list as $k => $v) {

            if ($n !== $v['un']) {
                $n = $v['un'];
            }

            $arr[] = $v['rr'];
        }

//        dump($arr);
//        dump($list);

//        die;


        //若是当前用户 没有任何角色的话  未定义变量 arr  在前端设计

        return view('user/assignRoles', [
            'id' => $id,
            'name' => $user[0]['name'],
            'role' => $role,
            'arr' => $arr
        ]);

    }


    /** 执行分配角色
     * @param Request $request
     * @param $id
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */
    public function doassignRoles(Request $request, $id)
    {

        //获取当前用户id
        $p = $request->post();
//        dump($p);
//        dump($id);
        if (empty($p)) {
            return $this->error('分配失败,没有为该用户分配角色');

        }
//          die;

        //用户点击取消 √  怎么传数据库呢?   删除当前一条数据!
        //  可以 先 清空(删除) 当前 用户 所有 选项  然后 按该用户 √选的 来填充数据库

        Db::name('xu_user_role')
            ->where('uid=' . $id)
            ->delete();

        //填充用户√选数据

        $arr = [];
        foreach ($p as $k => $v) {
//            dump($v);
            $arr['user_role']['uid'] = $id;
            $arr['user_role']['rid'] = $v;
//            dump($arr);

            $data = [
                'uid' => $arr['user_role']['uid'],
                'rid' => $arr['user_role']['rid']
            ];


//            dump($data);die;
            $rows = Db::name('xu_user_role')
                ->insert($data);
        }


        if ($rows) {
            return $this->success('分配成功', 'admin/user/index');
        } else {
            return $this->error('分配失败');
        }

    }


}